package Banco.DAO;

import Banco.Classes.Aluno;
import Banco.Classes.ConfiguracaoTurma;
import Banco.Classes.Professor;
import Banco.Classes.Turma;
import Banco.Conexao.conexao3G;
import enviosms.Mensagem;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;

/**Classe destinada a operações relacionadas com o objeto Mensagem

 * @author Yoka Sistemas

 * @version full

 * @since Release 01 da aplicação

 */
public class MensagensDAO {

    private conexao3G conecta3g;

    public MensagensDAO() {

        conecta3g = conexao3G.getConexao3G();
        //conecta3g.conecta();
       ResultSet rs3= conecta3g.executeSql("SELECT * FROM mensagem");
        rs3= conecta3g.executeSql("SELECT * FROM aluno");
        rs3= conecta3g.executeSql("SELECT * FROM professor");
        rs3= conecta3g.executeSql("SELECT * FROM turma");
        rs3= conecta3g.executeSql("SELECT * FROM configuracaoturma");
        //conecta3g.desconecta();

    }

    /**Método capturar todas as Mensagens de todas as Turma que um
     * professor leciona

     * @author Yoka Sistemas

     * @param  professor Professsor -

     * @return ArrayList - lista de todas as mensagens

     */
    public ArrayList<Mensagem> getMensagensProfessor(Professor professor) throws SQLException {

        String matriculaProfessor = professor.getMatricula();
        ArrayList<Turma> listaTurmaProfessor = new ArrayList<Turma>();
        ArrayList<Mensagem> listaMensagensProfessor = new ArrayList<Mensagem>();

        String SQL_getTurmasProfessor = "SELECT * FROM turma WHERE " +
                "professor_matricula = '" + matriculaProfessor + "'";

        //conecta3g.conecta();
       ResultSet rs3= conecta3g.executeSql(SQL_getTurmasProfessor);
        rs3.first();

        if (rs3.first()) {
            do {

                Turma turmaProfessor = new Turma();

                turmaProfessor.setCurso(rs3.getString("curso"));
                turmaProfessor.setDisciplina(rs3.getString("disciplina"));
                turmaProfessor.setPeriodo(rs3.getString("periodo"));
                turmaProfessor.setTurma(rs3.getString("turma"));

                listaTurmaProfessor.add(turmaProfessor);

            } while (rs3.next());
        }

        Turma turma;
        String SQL_getMensagensPropessor;

        for (int i = 0; i < listaTurmaProfessor.size(); i++) {

            //conecta3g.conecta();

            rs3= conecta3g.executeSql("SELECT * FROM mensagem");
            turma = listaTurmaProfessor.get(i);

            SQL_getMensagensPropessor = "SELECT * FROM mensagem WHERE( " +
                    "turma_curso = '" + turma.getCurso() + "' " +
                    "AND turma_disciplina = '" + turma.getDisciplina() + "' " +
                    "AND turma_periodo = '" + turma.getPeriodo() + "' " +
                    "AND turma_turma = '" + turma.getTurma() + "') ORDER BY dataenviada";

         rs3= conecta3g.executeSql(SQL_getMensagensPropessor);
            rs3.first();

            if (rs3.first()) {

                do {
                    Mensagem mensagem = new Mensagem();
                    mensagem.setIdMensagem(rs3.getInt("idmensagem"));
                    mensagem.setCorpoMsg(rs3.getString("msg"));
                    mensagem.setRemetente(rs3.getString("remetente"));
                    mensagem.setTurma_cursoFK(rs3.getString("turma_curso"));
                    mensagem.setTurma_disciplinaFK(rs3.getString("turma_disciplina"));
                    mensagem.setTurma_periodoFK(rs3.getString("turma_periodo"));
                    mensagem.setTurma_turmaFK(rs3.getString("turma_turma"));
                    mensagem.setData(rs3.getDate("dataenviada"));

                    listaMensagensProfessor.add(mensagem);


                } while (rs3.next());
            }//fim do if

        }//fim do for


        //conecta3g.desconecta();
        return listaMensagensProfessor;
    }

    /**Método capturar todas as Mensagens de todas as Turma que um
     * Aluno participa

     * @author Yoka Sistemas

     * @param  aluno Aluno -

     * @return ArrayList - lista de todas as mensagens

     */
    public ArrayList<Mensagem> getMensagensAluno(Aluno aluno) throws SQLException {

        ArrayList<ConfiguracaoTurma> listaDisciplinasAluno = new ArrayList<ConfiguracaoTurma>();
        ArrayList<Mensagem> listaMensagens = new ArrayList<Mensagem>();

        String matriculaAluno = aluno.getMatricula();
        String SQL_getDisciplinasAluno = "SELECT * FROM configuracaoturma WHERE " +
                "aluno_matricula = '" + matriculaAluno + "'";

        //conecta3g.conecta();
       ResultSet rs3= conecta3g.executeSql(SQL_getDisciplinasAluno);
        rs3.first();

        if (rs3.first()) {
            do {

                ConfiguracaoTurma disciplinaAluno = new ConfiguracaoTurma();

                disciplinaAluno.setAluno_matriculaFK(matriculaAluno);
                disciplinaAluno.setTurma_cursoFK(rs3.getString("turma_curso"));
                disciplinaAluno.setTurma_disciplinaFK(rs3.getString("turma_disciplina"));
                disciplinaAluno.setTurma_periodoFK(rs3.getString("turma_periodo"));
                disciplinaAluno.setTurma_turmaFK(rs3.getString("turma_turma"));

                System.out.println("TURMA DO ALUNO\n------------------------------");
                System.out.println(rs3.getString("turma_curso"));
                System.out.println(rs3.getString("turma_disciplina"));
                System.out.println(rs3.getString("turma_periodo"));
                System.out.println(rs3.getString("turma_turma"));
                System.out.println("------------------------------");

                listaDisciplinasAluno.add(disciplinaAluno);
            } while (rs3.next());
        }

        ConfiguracaoTurma CT;
        String SQL_getMensagensDisciplina;

        for (int i = 0; i < listaDisciplinasAluno.size(); i++) {

            rs3= conecta3g.executeSql("SELECT * FROM mensagem");
            CT = listaDisciplinasAluno.get(i);

            SQL_getMensagensDisciplina = "SELECT * FROM mensagem WHERE( " +
                    "turma_curso = '" + CT.getTurma_cursoFK() + "' " +
                    "AND turma_disciplina = '" + CT.getTurma_disciplinaFK() + "' " +
                    "AND turma_periodo = '" + CT.getTurma_periodoFK() + "' " +
                    "AND turma_turma = '" + CT.getTurma_turmaFK() + "') ORDER BY dataenviada";

         rs3= conecta3g.executeSql(SQL_getMensagensDisciplina);
            rs3.first();

            if (rs3.first()) {
                do {
                    Mensagem menagem = new Mensagem();

                    menagem.setIdMensagem(rs3.getInt("idmensagem"));
                    menagem.setCorpoMsg(rs3.getString("msg"));
                    menagem.setRemetente(rs3.getString("remetente"));
                    menagem.setTurma_cursoFK(rs3.getString("turma_curso"));
                    menagem.setTurma_disciplinaFK(rs3.getString("turma_disciplina"));
                    menagem.setTurma_periodoFK(rs3.getString("turma_periodo"));
                    menagem.setTurma_turmaFK(rs3.getString("turma_turma"));
                    menagem.setData(rs3.getDate("dataenviada"));

                    listaMensagens.add(menagem);
                } while (rs3.next());
            }
        }

        //conecta3g.desconecta();
        return listaMensagens;
    }

    /**Método capturar todas as Mensagens de de uma Turma

     * @author Yoka Sistemas

     * @param  turma Turma -

     * @return ArrayList - lista de todas as mensagens

     */
    public ArrayList<Mensagem> getMensagensTurma(Turma turma) throws SQLException {

        String Turma_curso, Turma_disciplina, Turma_periodo, Turma_turma;
        Turma_curso = turma.getCurso();
        Turma_disciplina = turma.getDisciplina();
        Turma_periodo = turma.getPeriodo();
        Turma_turma = turma.getTurma();

        ArrayList<Mensagem> listaMensagensProfessor = new ArrayList<Mensagem>();
        Turma turmaCorrente = new Turma();

        String SQL_getMensagemTurma = "SELECT * FROM mensagem WHERE( " +
                " turma_curso = '" + Turma_curso + "' " +
                " AND turma_disciplina = '" + Turma_disciplina + "' " +
                " AND turma_periodo = '" + Turma_periodo + "' " +
                " AND turma_turma = '" + Turma_turma + "') ORDER BY dataenviada";//ORDER BY dataEnviada

        //conecta3g.conecta();

       ResultSet rs3= conecta3g.executeSql(SQL_getMensagemTurma);
        rs3.first();

        if (rs3.first()) {
            do {
                Mensagem mensagem = new Mensagem();
                mensagem.setIdMensagem(rs3.getInt("idmensagem"));
                mensagem.setCorpoMsg(rs3.getString("msg"));
                mensagem.setRemetente(rs3.getString("remetente"));
                mensagem.setTurma_cursoFK(rs3.getString("turma_curso"));
                mensagem.setTurma_disciplinaFK(rs3.getString("turma_disciplina"));
                mensagem.setTurma_periodoFK(rs3.getString("turma_periodo"));
                mensagem.setTurma_turmaFK(rs3.getString("turma_turma"));
                mensagem.setData(rs3.getDate("dataenviada"));

                listaMensagensProfessor.add(mensagem);

            } while (rs3.next());
        }

        //conecta3g.desconecta();
        return listaMensagensProfessor;
    }

    public void insertMensagem(Mensagem mensagem) throws SQLException {

        String SQL_InsertMensagem = "INSERT INTO mensagem(turma_curso, turma_disciplina, turma_turma, turma_periodo, msg, remetente, dataenviada)" +
                " VALUES ('" + mensagem.getTurma_cursoFK() + "', '" + mensagem.getTurma_disciplinaFK() + "', '" + mensagem.getTurma_turmaFK() + "', '" + mensagem.getTurma_periodoFK() + "', '" + mensagem.getCorpoMsg() + "', '" + mensagem.getRemetente() + "', now())";

        System.out.println(SQL_InsertMensagem);

        //conecta3g.conecta();
        conecta3g.execute(SQL_InsertMensagem);

        int idMSGInserida;

        //busca no banco apenas o id da mensagem
        String SQL_getIDMsgInerida = "SELECT idmensagem FROM mensagem";
        System.out.println(SQL_getIDMsgInerida);

       ResultSet rs3= conecta3g.executeSql(SQL_getIDMsgInerida);
        //pega o id da ultima mensagem que acabou de ser salva e seta no atributo idMensagem
        if (rs3.last()) {

            idMSGInserida = rs3.getInt("idmensagem");

            System.out.println("id Mensagem: " + idMSGInserida);

            mensagem.setIdMensagem(idMSGInserida);
        }

        //busca no banco apenas a data da mensagem
        String SQL_getDataMsgInserida = "SELECT dataenviada FROM mensagem";
        System.out.println(SQL_getDataMsgInserida);

       rs3= conecta3g.executeSql(SQL_getDataMsgInserida);
        //pega a data da ultima mensagem que acabou de ser salva e seta no atributo Data
        if (rs3.last()) {

            java.sql.Date d = rs3.getDate("dataenviada");

            System.out.println("Data Enviada: " + d);
            mensagem.setData(d);
        }

    }

    //Eu BEL q fiz, talvez precise dele, por enquanto ainda n
    /*public Date getDataMSG(int id_mensagem) throws SQLException{
    String SQL_getMensagem = "SELECT * FROM mensagem WHERE( " +
    "idMensagem = '" + id_mensagem + "')";
    Date data = null;

    //conecta3g.conecta();

   ResultSet rs3= conecta3g.executeSql(SQL_getMensagem);
    rs3.first();

    if(rs3.last()){
    data = rs3.getDate("dataEnviada");
    System.out.println(data);
    }

    return data;
    }*/
    private Date converteData(String data) {

        Date novaData = null;
        try {
            data = data.substring(6) + "-" +
                    data.substring(3, 5) + "-" +
                    data.substring(0, 2);
            novaData = Date.valueOf(data);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return novaData;
    }

    // TESTES  TESTES  TESTES  TESTES  TESTES  TESTES  TESTES  TESTES  TESTES  TESTES
    public static void main(String args[]) throws SQLException {
        //TESTE 1
        /*//rotina de teste do metodo getMensagensTurma(Turma turma)
        //teste getMensagensTurma(Turma turma)
        ArrayList<Mensagem> retornoMensagem = new ArrayList<Mensagem>();
        MensagensDAO teste = new MensagensDAO();

        Turma turma = new Turma();
        turma.setCurso("Engenharia de Computação");
        turma.setDisciplina("TEC888");
        turma.setPeriodo("2009.1");
        turma.setTurma("01");
        
        retornoMensagem = teste.getMensagensTurma(turma);

        System.out.println("TAMANHO DO VETOR DE MENSAGEM: "+retornoMensagem.size());
        System.out.println("Impressão das Messagens da turma "+turma.getDisciplina());
        for(int i = 0; i < retornoMensagem.size(); i++){
        System.out.println("------------------------------");
        System.out.println("\nMensagem: "+retornoMensagem.get(i).getCorpoMsg()+
        "\nRemetente: "+retornoMensagem.get(i).getRemetente()+"\nCurso: "
        +retornoMensagem.get(i).getTurma_cursoFK()
        +"\nDisciplina: "+retornoMensagem.get(i).getTurma_disciplinaFK()+"\n"+
        retornoMensagem.get(i).getTurma_periodoFK()
        +"\nTurma: "+retornoMensagem.get(i).getTurma_turmaFK()
        +"\nData: "+retornoMensagem.get(i).getDataENviada()
        +"\nID: "+retornoMensagem.get(i).getIdMensagem());
        System.out.println("------------------------------");
        }

        //FIM -- rotina de teste do metodo getMensagensTurma(Turma turma)*/
        //TESTE 2
        /*
        //TESTE 2 - TESTE getMensagemProfessor
        MensagensDAO teste2 = new MensagensDAO();
        ArrayList<Mensagem> mensagensProfessor = new ArrayList<Mensagem>();
        Professor professor = new Professor();

        professor.setMatricula("011222333");
        mensagensProfessor = teste2.getMensagensProfessor(professor);

        System.out.println("TAMANHO DO VETOR DE MENSAGEM: "+mensagensProfessor.size());
        System.out.println("Impressão das Messagens do Professor: "+professor.getMatricula());
        for(int i = 0; i < mensagensProfessor.size(); i++){
        System.out.println("------------------------------");
        System.out.println("\nMensagem: "+mensagensProfessor.get(i).getCorpoMsg()+
        "\nRemetente: "+mensagensProfessor.get(i).getRemetente()+"\nCurso: "
        +mensagensProfessor.get(i).getTurma_cursoFK()
        +"\nDisciplina: "+mensagensProfessor.get(i).getTurma_disciplinaFK()+"\n"+
        mensagensProfessor.get(i).getTurma_periodoFK()
        +"\nTurma: "+mensagensProfessor.get(i).getTurma_turmaFK()
        +"\nData: "+mensagensProfessor.get(i).getDataENviada()
        +"\nID: "+mensagensProfessor.get(i).getIdMensagem());
        System.out.println("------------------------------");
        }
         */
        //TESTE 3
        /*
        //teste getMensagensAluno(Aluno aluno)
        MensagensDAO teste3 = new MensagensDAO();
        ArrayList<Mensagem> mensagensAluno = new ArrayList<Mensagem>();
        Aluno aluno = new Aluno();
        aluno.setMatricula("061122050");

        mensagensAluno = teste3.getMensagensAluno(aluno);
        System.out.println("MENSAGENS DO ALUNO: "+aluno.getMatricula());
        System.out.println("--------------------------");
        for(int i = 0; i < mensagensAluno.size(); i++){

        System.out.println("Mensagem: "+mensagensAluno.get(i).getCorpoMsg());
        System.out.println("Data de Envio: "+mensagensAluno.get(i).getDataENviada());
        System.out.println("ID: "+mensagensAluno.get(i).getIdMensagem());
        System.out.println("Remetente: "+mensagensAluno.get(i).getRemetente());
        System.out.println("Curso: "+mensagensAluno.get(i).getTurma_cursoFK());
        System.out.println("Disciplna: "+mensagensAluno.get(i).getTurma_disciplinaFK());
        System.out.println("Periodo: "+mensagensAluno.get(i).getTurma_periodoFK());
        System.out.println("Turma: "+mensagensAluno.get(i).getTurma_turmaFK());
        System.out.println("--------------------------");
        }
         */
        //TESTE 4
        /*
        //teste de inserção de mensagem
        MensagensDAO teste4 = new MensagensDAO();
        Mensagem mesnsagem = new Mensagem();
        
        mesnsagem.setCorpoMsg("corinthians campeão da libertadores e mundial de clubes 2010");

        mesnsagem.setRemetente("Jaizo Junior");
        mesnsagem.setTurma_cursoFK("Engenharia de Computação");
        mesnsagem.setTurma_disciplinaFK("TEC408");
        mesnsagem.setTurma_periodoFK("2009.1");
        mesnsagem.setTurma_turmaFK("01");

        teste4.insertMensagem(mesnsagem);
         */
        /**
         * Recupera um numero de mensagens enviadas para a data passada
         * @param data - data
         * @return número de mensagens
         */
        MensagensDAO md = new MensagensDAO();
        Date d = new Date(109, 0, 1);
        System.out.println(md.getDataMsg(d));
    }

    public int getDataMsg(Date data) {
        int i = 0;
        //conecta3g.conecta();

        String tabela = "mensagem";
        String SQL_getBetweenArquivos = "SELECT COUNT(*) FROM " + tabela + " WHERE dataenviada = '" + data + "'";
       ResultSet rs3= conecta3g.executeSql(SQL_getBetweenArquivos);
       
        try {
           rs3.first();
            i = rs3.getInt(1);

        } catch (SQLException ex) {
            Logger.getLogger(MensagensDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return i;
    }
}
